package com.example.sneakerappforme1105.ViewModel;

import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;

import com.example.sneakerappforme1105.bean.CartItem;
import com.example.sneakerappforme1105.bean.Goods;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class CartViewModel extends ViewModel {
    private final MutableLiveData<List<CartItem>> cartItemList = new MutableLiveData<>(new ArrayList<>());
    private final MutableLiveData<HashMap<Long, Goods>> goodsMap = new MutableLiveData<>(new HashMap<>());


    public LiveData<List<CartItem>> getCartItemList() {
        return cartItemList;
    }

    public LiveData<HashMap<Long, Goods>> getGoodsMap() {
        return goodsMap;
    }


    public void setCartItemList(List<CartItem> items) {
        cartItemList.setValue(items);
    }

    public void setGoodsMap(HashMap<Long, Goods> map) {
        goodsMap.setValue(map);
    }


    public void updateCartItem(CartItem item, int position) {
        List<CartItem> list = cartItemList.getValue();
        if (list != null) {
            list.set(position, item);   // 更新某一项数据
            cartItemList.setValue(list);
        }
    }

    public boolean addCartItem(CartItem item){  // item 可能是多件商品
        List<CartItem> list = cartItemList.getValue();  // list此时的 cartItem都是有主键的
        int flag = 0; // 表示是否找到相同的数据项，找到则设置为1
        if(list.isEmpty()){ // list为空 直接加入数据
            list.add(item);
        }else{
            for(int i=0; i<list.size();i++){
                if(item.getGoodsId()==list.get(i).getGoodsId() && item.getSize().equals(list.get(i).getSize())){    // goodsid相同   // 如果已经存在 是有主键的
                    CartItem ith = list.get(i); // 获得列表的第 i 项目
                    ith.setNum(ith.getNum()+item.getNum()); // 根据顾客需求增加
//                    ith.setIsChecked(item.getIsChecked());
                    updateCartItem(ith,i);  // 更新第i项 的 商品数目
                    flag = 1;
                    break;
                }
            }

            if(flag == 1) return false;   // 返回 false 表示加入的商品项，已经存在不需要 更新HashMap<Goods>

            // 下面是没找到的情况, 插入到 list中
            list.add(item); // item还包括商品数目
            cartItemList.setValue(list);

        }
        return true;
    }

    public void clearCart() {
        cartItemList.setValue(new ArrayList<>());
        goodsMap.setValue(new HashMap<>());
    }

    public void updateCartItems(List<CartItem> items) {
        cartItemList.postValue(items); // 触发 LiveData 更新
    }

    public void updateGoodsMap(Map<Long, Goods> map) {
        goodsMap.postValue((HashMap<Long, Goods>) map);
    }








}
